/**
 * Copyright (c) 2011 Technical Centre Radio Systems Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ua.tcrs.tabula;

import ua.tcrs.tabula.log.Logger;
import ua.tcrs.tabula.config.Configuration;

/**
 * Static access point to TabulaContext
 * Delegates calls to TabulaContext injected by Container
 * @InjectService may be used instead
 */

public final class Tabula {
	private static TabulaContext context = null;
	private Tabula() {}
	public static Logger getLogger() {
		return context.getLogger();
	}
	public static Configuration getConfig() {
		return context.getConfig();
	}
	public static Dispatcher getDispatcher() {
		return context.getDispatcher();
	}
	public static <T> T getService( Class<T> clazz ) {
		return context.getService( clazz );
	}
	public static void close( int code ) {
		context.close( code );
	}
	/**
	  * Actual Bootstrap must inject Context before initialize module(s)
	  */
	public synchronized static void setTabulaContext( TabulaContext ctx ) {
		if ( context == null ) {
			context = ctx;
		} else {
			throw new RuntimeException( "TabulaContext already setted" );
		}
	}
}

